When does picture preloading occur?


Author
Message
Blackadder
Blackadder
Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)
Group: Forum Members
Posts: 280, Visits: 147

Simple question: at what point during an experiment are pictures preloaded into (graphics) memory?


Follow-up question: can that point be controlled programatically?


Best wishes,
  Malte 


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K

To the best of my knowledge:


Into main memory (i.e. RAM): When the script is parsed.


Into graphics memory: When the stim is prepared by a <trial>, i.e. during /pretrialpause if there is any.


Blackadder
Blackadder
Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)
Group: Forum Members
Posts: 280, Visits: 147

Thanks, that's what I was hoping for.


I asked because we recently observed a picture loading delay when pictures are loaded over a busy LAN connection. Each trial would take some time to start. The delay vanishes when the network connection is unthrottled.


Plus, the picture files used by the script are write-protected during the whole runtime of the script. That should not happen if parsing & memory loading occurred at the start of the script, should it?


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K

How exactly are you using the picture files throughout the script? There are situations where parsing into memory up-front may not be possible (e.g. not enough RAM available or -- more likely -- when you dynamically shuffle items around at runtime). Anything of that sort going on here?


Blackadder
Blackadder
Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)
Group: Forum Members
Posts: 280, Visits: 147

Yes, exactly. I preload the stimuli (only 4 rather small BMP files) as an <item> list referenced by a <picture> element. Then I set the / select property of other <picture> elements to the appropriate indices at runtime.


Will that pose a problem?


Dave
Dave
Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)Supreme Being (1M reputation)
Group: Administrators
Posts: 12K, Visits: 98K

If I understand your setup correctly, I'd say no, shouldn't pose a problem. To give you an example,


<expressions>
/ rnd = noreplace(1,2)
</expressions>

<values>
/ a = 1
/ b = 1
</values>

<trial mytrial>
/ ontrialbegin = [values.a=expressions.rnd; values.b=expressions.rnd]
/ stimulustimes = [0=a; 1000=b]
/ validresponse = (noresponse)
/ trialduration = 1500
</trial>

<picture a>
/ items = myitems
/ select = values.a
</picture>

<picture b>
/ items = myitems
/ select = values.b
</picture>

<item myitems>
/ 1 = "pic01.jpg"
/ 2 = "pic02.jpg"
</item>

<block myblock>
/ trials = [1-10=mytrial]
</block>


should perform better than


<expressions>
/ rnd = noreplace(1,2)
</expressions>

<trial mytrial>
/ ontrialbegin = [picture.a.item=getitem(item.myitems, expressions.rnd);
    picture.b.item=getitem(item.myitems, expressions.rnd)]
/ ontrialend = [clear(picture.a); clear(picture.b)]
/ stimulustimes = [0=a; 1000=b]
/ validresponse = (noresponse)
/ trialduration = 1500
</trial>

<picture a>
</picture>

<picture b>
</picture>

<item myitems>
/ 1 = "pic01.jpg"
/ 2 = "pic02.jpg"
</item>

<block myblock>
/ trials = [1-10=mytrial]
</block>


although -- at the surface level -- both do the same thing.


Blackadder
Blackadder
Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)Supreme Being (26K reputation)
Group: Forum Members
Posts: 280, Visits: 147

That is interesting. I tested several variants now and found your first suggestion to be fastest among all. Thanks for pointing that out!


GO

Merge Selected

Merge into selected topic...



Merge into merge target...



Merge into a specific topic ID...




Reading This Topic

Explore
Messages
Mentions
Search