小编Mag*_*yev的帖子

#pragma unroll做了什么?它会影响线程数吗?

我是CUDA的新手,我无法理解循环展开.我写了一段代码来理解这项技术

__global__ void kernel(float *b, int size)
{
    int tid = blockDim.x * blockIdx.x + threadIdx.x;
 #pragma unroll
    for(int i=0;i<size;i++)
        b[i]=i;
}
Run Code Online (Sandbox Code Playgroud)

以上是我的核心功能.在main我称之为下面

int main()
{
    float * a; //host array
    float * b; //device array
    int size=100;

    a=(float*)malloc(size*sizeof(float));
    cudaMalloc((float**)&b,size);
    cudaMemcpy(b, a, size, cudaMemcpyHostToDevice);

    kernel<<<1,size>>>(b,size); //size=100

    cudaMemcpy(a, b, size, cudaMemcpyDeviceToHost);

    for(int i=0;i<size;i++)
        cout<<a[i]<<"\t";

    _getch();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这是否意味着我有size*size= 10000个线程运行来执行程序?在展开循环时是否创建了100个?

cuda nvidia pragma loop-unrolling

24
推荐指数
1
解决办法
3万
查看次数

QML,如何动态地从C++中改变Repeater的Item

我在网格上有QML Repeater,当我点击项目i发出由C++类处理的信号,然后在C++中更改数组,然后将其指定为QML Repeater的模型.有没有办法改变C++模型的两个元素,而不像我那样改变整个模型?

这是我的qml文件

Grid{
height:width
rows:8
columns: 8

Repeater{
    id: chessPiecesRptr
       ...
   signal chessfigureSelected(int index)


    delegate: Item{
        id:chessPiecesItm

        Image{
            ...
        }


        MouseArea
        {
            anchors.fill:parent
            onClicked: {

                chessPiecesRptr.chessfigureSelected(index)

            }
        }

    }

}
Run Code Online (Sandbox Code Playgroud)

更新QML Repeater模型的C++方法

void ChessFiguresClass::changeModel()
{
    QStringList dataList;

    for(int i=0;i<64;i++)
        dataList.append(QChar(posArray[i]));

    QQmlProperty::write(chessPiecesRptr, "model",   QVariant::fromValue(dataList));
}
Run Code Online (Sandbox Code Playgroud)

c++ qt repeater qml

1
推荐指数
1
解决办法
3824
查看次数

标签 统计

c++ ×1

cuda ×1

loop-unrolling ×1

nvidia ×1

pragma ×1

qml ×1

qt ×1

repeater ×1