cuda为啥要开启32倍数的线程
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cuda为啥要开启32倍数的线程相关的知识,希望对你有一定的参考价值。
CUDA里,基本调度单位成为warp,一个warp由32个线程组成,所以一般情况下,建议使用32倍数来作为线程数。当然,并不是一定要32倍数的线程数,比如设置112个线程也是可以的,只不过,前96个线程分别组成3组warp,而后面16个线程实际在第4个warp里,只不过这个warp的后16个线程是用于补齐的,不会被调度执行而已! 参考技术A 32 个线程为单位进行调度,因此 Block 中的 Thread 数目应当 是 32 的倍数本回答被提问者和网友采纳为啥我的java程序明明开启了4条线程,却只有一条线程在运行?
package com.heima.syn;
public class Demo4_Ticket
/**
* @param args
* 火车站卖票的例子用实现Runnable接口 //此办法做不出来
*/
public static void main(String[] args)
MyTicket mt = new MyTicket();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
new Thread(mt).start();
/*Thread t1 = new Thread(mt); //多次启动一个线程是非法的
t1.start();
t1.start();
t1.start();
t1.start();*/
class MyTicket implements Runnable
private int tickets = 100000;
@Override
public void run()
while(true)
synchronized(this)
if(tickets <= 0)
break;
try
Thread.sleep(10); //线程1睡,线程2睡,线程3睡,线程4睡
catch (InterruptedException e)
e.printStackTrace();
System.out.println(Thread.currentThread().getName() + "...这是第" + tickets-- + "号票");
结果
Thread-0...这是第100000号票
Thread-0...这是第99999号票
Thread-0...这是第99998号票
Thread-0...这是第99997号票
。。。。。。
Thread t2 = new Thread(r1, "2号窗口");// 创建线程
Thread t3 = new Thread(r1, "3号窗口");// 创建线程
Thread t4 = new Thread(r1, "4号窗口");// 创建线程
t1.start();
t2.start();
这样创建多线程 参考技术C 你要等待久一点,才可以看到其他的线程,因为线程是不稳定的。。。
以上是关于cuda为啥要开启32倍数的线程的主要内容,如果未能解决你的问题,请参考以下文章
为啥 CUDA 中网格中的所有块的 Blockdim 都应该相同?
为啥我的java程序明明开启了4条线程,却只有一条线程在运行?