Biryukov239 / matrix-multiplication-kotlin

0 stars 0 forks source link

Упрощение имплементации `Kernel` #5

Closed lounres closed 5 months ago

lounres commented 5 months ago

Вместо того чтобы каждый раз писать

object : Kernel() {
    override fun run() { ... }
}

можно один раз написать

public inline fun Kernel(crossinline block: () -> Unit): Kernel =
    object : Kernel() {
        override fun run() { ... }
    }

чтобы потом просто писать Kernel { ... }.

Biryukov239 commented 5 months ago

Кажется так не получится, getLocalId, getGlobalId - это методы класса Kernel, то есть часть aparapi и вызывать их не внутри метода Kernel нельзя, также в aparapi если нужно создавать что-то аннотированное @Local(локальная память видеокарты), то это должно быть внутри Kernel и вне run. Как в примере из документации:

Kernel k = new Kernel(){
    @Local int[] localBuffer = new int[1024]; // this is a local buffer 1024 int's shared across all work item's in a group
    public void run(){
         // access buffer
         // access localBuffer
         localBarrier(); // allows all writes to localBuffer to be synchronized across all work items in this group
         // ....
    }
}
lounres commented 5 months ago

Да, согласен. При составлении этого issue плохо разобрался в коде. Да, идея плохая.